package com.pinyougou.sellergoods.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.alibaba.fastjson.JSON;
import com.pinyougou.mapper.*;
import com.pinyougou.pojo.Goods;
import com.pinyougou.pojo.Item;
import com.pinyougou.service.GoodsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Map;

@Service(interfaceName ="com.pinyougou.service.GoodsService")
@Transactional
public class GoodsServiceImpl implements GoodsService{

    /** 注入持久层的代理对象*/
    //标准商品
    @Autowired
    private GoodsMapper goodsMapper;

    //商品的描述
    @Autowired
    private GoodsDescMapper goodsDescMapper;
    //注入SKU具体商品
    @Autowired
    private ItemMapper itemMapper;
    //注入品牌
    @Autowired
    private BrandMapper brandMapper;
    //注入商家
    @Autowired
    private SellerMapper sellerMapper;
    //商品分类
    @Autowired
    private ItemCatMapper itemCatMapper;


    /**
     * 添加商品
     *对SKU具体商品信息的保存
     * @param goods
     */
    @Override
    public void save(Goods goods) {

        try {
            //保存标准商品
            goods.setAuditStatus("0");
            goodsMapper.insertSelective(goods);


            //上面保存商品时，同时会将商品的id返回
            //将商品的id赋值给商品描述实体类中，然后保存到数据库中
            goods.getGoodsDesc().setGoodsId(goods.getId());
            goodsDescMapper.insertSelective(goods.getGoodsDesc());

            /** 判断是否启用规格,如果为1就可以保存具体商品属性,否则不能保存goods的中获取的属性，
             *   就定义一个具体商品
             * */
            if("1".equals(goods.getIsEnableSpec())){
                /** 迭代所有的SKU具体商品集合，往SKU表插入数据 */
                for (Item item : goods.getItems()) {
                    //定义一个SKU具体商品名称
                    StringBuilder title =new StringBuilder();
                    title.append(goods.getGoodsName());
                    /** 把规格选项JSON字符串转化成Map集合 */
                    Map<String,Object> spec = JSON.parseObject(item.getSpec());
                    //spec.values()获取所有key的所有value
                    for (Object value : spec.values()) {
                        /** 拼接规格选项到SKU商品标题 */
                        title.append(" " + value);

                    }
                    //将title转换成字符串，设置给setTitle
                    /** 设置SKU商品的标题 */
                    item.setTitle(title.toString());

                    //设置具体商品(SKU)的其他属性
                    setItemInfo(item,goods);
                    //保存SKU具体商品到数据库
                    itemMapper.insertSelective(item);
                }
            }else{
                /** 创建SKU具体商品对象 */
                Item item = new Item();
                /** 设置SKU商品的标题 */
                item.setTitle(goods.getGoodsName());
                /** 设置SKU商品的价格 */
                item.setPrice(goods.getPrice());
                /** 设置SKU商品库存数据 */
                item.setNum(9999);
                /** 设置SKU商品启用状态 */
                item.setStatus("1");
                /** 设置是否默认*/
                item.setIsDefault("1");
                /** 设置规格选项 */
                item.setSpec("{}");
                /** 设置SKU商品其它属性 */
                setItemInfo(item, goods);
                itemMapper.insertSelective(item);
            }

        } catch (Exception e) {
            throw new RuntimeException(e);
        }


    }
    public void setItemInfo(Item item,Goods goods){
        /** 设置SKU商品图片地址 */
        //将json字符串转换成list<Map>集合goods.getGoodsDesc().getItemImages()也就是goods.goodDesc.itemImages
        List<Map> imageList = JSON.parseArray(goods.getGoodsDesc().getItemImages(),Map.class);
        //判断imageList是否有图片
        if(imageList!=null && imageList.size()>0){
            //获取第一张图片,同时设置图片
            item.setImage((String) imageList.get(0).get("url"));

        }
        /** 设置SKU商品的分类(三级分类) */
        item.setCategoryid(goods.getCategory3Id());
        /** 设置SKU商品的创建时间 */
        item.setCreateTime(new Date());
        /** 设置SKU商品的修改时间 */
        item.setUpdateTime(item.getCreateTime());
        /** 设置SPU商品的编号 */
        item.setGoodsId(goods.getId());
        /** 设置商家编号 */
        item.setSellerId(goods.getSellerId());
        /** 设置商品分类名称 */
        item.setCategory(itemCatMapper.selectByPrimaryKey(goods.getCategory3Id()).getName());
        /** 设置品牌名称 */
        item.setBrand(brandMapper.selectByPrimaryKey(goods.getBrandId()).getName());
        /** 设置商家店铺名称 */
        item.setSeller(sellerMapper.selectByPrimaryKey(goods.getSellerId()).getName());
    }

    /**
     * 修改方法
     *
     * @param goods
     */
    @Override
    public void update(Goods goods) {

    }

    /**
     * 根据主键id删除
     *
     * @param id
     */
    @Override
    public void delete(Serializable id) {

    }

    /**
     * 批量删除
     *
     * @param ids
     */
    @Override
    public void deleteAll(Serializable[] ids) {

    }

    /**
     * 根据主键id查询
     *
     * @param id
     */
    @Override
    public Goods findOne(Serializable id) {
        return null;
    }

    /**
     * 查询全部
     */
    @Override
    public List<Goods> findAll() {
        return null;
    }

    /**
     * 多条件分页查询
     *
     * @param goods
     * @param page
     * @param rows
     */
    @Override
    public List<Goods> findByPage(Goods goods, int page, int rows) {
        return null;
    }
}
